from socket import *

IP = '127.0.0.1'
PORT = 50000
# 第一依次从socket缓冲区最多读取512个字节
BUFLEN = 512

# 实例化socket
# AF_INET: IPv4 表示该socket网络层使用IPv4协议（也就是常说的IP协议）
# SOCK_STREAM: 表示该socket传输层使用TCP协议
listenSocket = socket(AF_INET, SOCK_STREAM)

# socket绑定IP地址和端口号
listenSocket.bind((IP, PORT))


# socket监听，参数表示最多接受多少个等待连接的客户端
listenSocket.listen(5)
print(f"服务端启动成功，在{PORT}端口等待客户端连接...")

# socket接受客户端连接，返回一个新的socket和客户端地址
dataSocket, addr = listenSocket.accept()
print(f"客户端{addr}已连接")


while True:
    # 从socket缓冲区读取数据，最多读取BUFLEN个字节
    data = dataSocket.recv(BUFLEN)

    # 如果客户端断开连接，则退出循环
    # 断开连接也就是客户端返回空bytes
    if not data:
        print(f"客户端{addr}已断开连接")
        break

    # 读取的是bytes类型，需要解码为字符串
    info = data.decode()
    print(f"收到客户端{addr}的消息：{info}")

    # 发送数据类型必须是bytes类型，所以也要编码
    dataSocket.send(f"服务端已收到信息：{info}".encode())


# 关闭socket连接
dataSocket.close()
listenSocket.close()
